Skip to content

设置输出目标 - LogSetTarget

函数简介

设置指定日志实例的输出目标。可同时组合:

  • 内置:FILE(文件)、CONSOLE(控制台)
  • 用户 Skin:由 LogRegisterSkin 返回的位枚举

接口名称

LogSetTarget

DLL调用

c
int32_t LogSetTarget(int64_t instance, int64_t loggerHandle, int32_t targetFlags);

参数说明

参数名类型说明
instance长整数型OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。
loggerHandle长整数型日志实例句柄(0 表示默认实例)。
targetFlags整数型输出目标位标志(见下表;可与用户 Skin 位或组合)。

LogTarget 枚举值

枚举值说明
OLA_LOG_TARGET_NONE0无输出
OLA_LOG_TARGET_FILE1 (1<<0)输出到文件
OLA_LOG_TARGET_CONSOLE2 (1<<1)输出到控制台
(预留)1<<21<<7预留给未来内置目标
用户 SkinLogRegisterSkin 返回值落在掩码 OLA_LOG_TARGET_USER_SKIN_MASK0xFFFFFF00,bit8..bit31)

位运算组合示例

将需要的输出目标 按位或(| 后传入 targetFlags

csharp
// 同时输出到文件和控制台(默认值 3)
int targetFlags = 1 | 2;  // OLA_LOG_TARGET_FILE | OLA_LOG_TARGET_CONSOLE
ola.LogSetTarget(0, targetFlags);

// 文件 + 自定义 Skin(skin 来自 LogRegisterSkin)
ola.LogSetTarget(logger, 1 | skinUi);

// 仅输出到某个 Skin
ola.LogSetTarget(logger, skinUi);

// 临时禁用所有输出
ola.LogSetTarget(0, 0);  // OLA_LOG_TARGET_NONE
cpp
int targetFlags = OLA_LOG_TARGET_FILE | OLA_LOG_TARGET_CONSOLE;  // 3
ola.LogSetTarget(0, targetFlags);

// 两个 logger 分别绑定不同 Skin
ola.LogSetTarget(loggerA, OLA_LOG_TARGET_FILE | skinUi);
ola.LogSetTarget(loggerB, OLA_LOG_TARGET_CONSOLE | skinNet);
python
target_flags = 1 | 2
ola.LogSetTarget(0, target_flags)
ola.LogSetTarget(logger, 1 | skin_ui)

示例

FILE=1 CONSOLE=2,常用 1|2=3。可再与 LogRegisterSkin 返回位或组合。

SDK 调用

cpp
#include "OLAPlugServer.h"

OLAPlugServer ola;
const int64_t logger = 0; // 默认实例

ola.OpenConsole(0); // 打开本进程控制台
int ret = ola.LogSetTarget(logger, 1 | 2); // FILE | CONSOLE
if (ret != 1) {
    return;
}
ola.LogInfo("file + console");
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
csharp
using System;
using OLAPlug;

var ola = new OLAPlugServer();
long logger = 0;

ola.OpenConsole(0); // 打开本进程控制台
int ret = ola.LogSetTarget(logger, 1 | 2); // FILE | CONSOLE
if (ret != 1) return;
ola.LogInfo("file + console");
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
python
from OLAPlugServer import OLAPlugServer

ola = OLAPlugServer()
logger = 0

ola.OpenConsole(0)  # 打开本进程控制台
ret = ola.LogSetTarget(logger, 1 | 2)  # FILE | CONSOLE
if ret != 1:
    raise RuntimeError("failed")
ola.LogInfo("file + console")
# 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
java
import com.olaplug.OLAPlugServer;

OLAPlugServer ola = new OLAPlugServer();
long logger = 0;

ola.OpenConsole(0); // 打开本进程控制台
int ret = ola.LogSetTarget(logger, 1 | 2); // FILE | CONSOLE
if (ret != 1) {
    return;
}
ola.LogInfo("file + console");
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
go
import "github.com/ola/olaplug/olaplug"

ola, _ := olaplug.NewOLAPlugServer("OLAPlug_x64.dll")
defer ola.ReleaseObj()
logger := int64(0)

ola.OpenConsole(0) // 打开本进程控制台
ret := ola.LogSetTarget(logger, 1 | 2) // FILE | CONSOLE
if ret != 1 {
    return
}
ola.LogInfo("file + console")
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
rust
use olaplug::OLAPlugServer;

let ola = OLAPlugServer::new("OLAPlug_x64.dll").unwrap();
let logger = 0i64;

ola.open_console(0); // 打开本进程控制台
let ret = ola.log_set_target(logger, 1 | 2); // FILE | CONSOLE
if ret != 1 {
    return;
}
ola.log_info("file + console");
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
cpp
var ola = com("OlaPlug.OlaSoft")
var logger = 0

ola.OpenConsole(0) // 打开本进程控制台
var ret = ola.LogSetTarget(logger, 1 | 2) // FILE | CONSOLE
if(ret == 1) {
    ola.LogInfo("file + console")
    // 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
}
vbscript
Set ola = CreateObject("OlaPlug.OlaSoft")
logger = 0

ola.OpenConsole 0
ret = ola.LogSetTarget(logger, 3)
If ret = 1 Then
    ola.LogInfo "file + console"
    ' 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
End If
text
.局部变量 ola, OLAPlug
.局部变量 ret, 整数型
.局部变量 logger, 长整数型

ola.Create ()
logger = 0

ola.OpenConsole (0)  ' 打开本进程控制台
ret = ola.LogSetTarget (logger, 位或 (1, 2))  ' FILE | CONSOLE
.如果真 (ret = 1)
    ola.LogInfo (“file + console”)
    ' 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
.如果真结束
aardio
import OLAPlugServer;
var ola = OLAPlugServer();
var logger = 0;

ola.OpenConsole(0); // 打开本进程控制台
var ret = ola.LogSetTarget(logger, 1 | 2); // FILE | CONSOLE
if(ret == 1){
    ola.LogInfo("file + console");
    // 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
}
text
变量 ola <类型 = OLAPlugServer>
ola = 新建 OLAPlugServer
长整数 logger = 0

ola.OpenConsole(0)  ' 打开本进程控制台
整数 ret = ola.LogSetTarget(logger, 1 位或 2)  ' FILE | CONSOLE
如果真 (ret = 1)
{
    ola.LogInfo("file + console")
    ' 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)
}
cpp
#include "OLAPlugServer.h"

OLAPlugServer ola;
int64_t logger = 0;

ola.OpenConsole(0); // 打开本进程控制台
int32_t ret = ola.LogSetTarget(logger, 1 | 2); // FILE | CONSOLE
if (ret != 1) {
    return;
}
ola.LogInfo("file + console");
// 含 Skin:LogSetTarget(logger, 1 | skin)(skin 来自 LogRegisterSkin)

原生 DLL 调用

cpp
long instance = CreateCOLAPlugInterFace();
long logger = 0;

OpenConsole(instance, 0);
int ret = LogSetTarget(instance, logger, 1 | 2); // FILE | CONSOLE
if (ret != 1) {
    return;
}
LogInfo(instance, "file + console");
// LogSetTarget(instance, logger, 1 | skin);
csharp
using System.Runtime.InteropServices;

[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern long CreateCOLAPlugInterFace();
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int OpenConsole(long ola, int type);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int LogSetTarget(long ola, long loggerHandle, int targetFlags);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int LogInfo(long ola, string message);

long instance = CreateCOLAPlugInterFace();
long logger = 0;

OpenConsole(instance, 0);
int ret = LogSetTarget(instance, logger, 1 | 2);
if (ret != 1) return;
LogInfo(instance, "file + console");
python
from ctypes import CDLL, c_int, c_int64

ola = CDLL("OLAPlug_x64.dll")
ola.CreateCOLAPlugInterFace.restype = c_int64
instance = ola.CreateCOLAPlugInterFace()
logger = 0

ola.OpenConsole(instance, 0)
ret = ola.LogSetTarget(instance, logger, 1 | 2)
if ret != 1:
    raise RuntimeError("LogSetTarget failed")
ola.LogInfo(instance, b"file + console")

返回值

返回值说明
1成功。
0失败。

注意事项

项目说明
默认值OLA_LOG_TARGET_FILE | OLA_LOG_TARGET_CONSOLE (3)。
用户 SkinLogRegisterSkin 再把返回值或进 targetFlags
回调类型OLALogSkinCallback
级别过滤LogSetLevel 过滤的日志不触发 Skin 回调。
回调编码跟随 DefaultReturnEncoding(与 API 返回字符串一致)。
已注销 Skinflags 中残留的 Skin 位会被静默忽略,不失败。
控制台颜色控制台输出支持按级别着色。
立即生效若日志系统已初始化,会自动重新初始化 sinks。
OLA_LOG_TARGET_NONE设置为 0 可临时禁用该 logger 的输出。

相关接口

接口说明
LogRegisterSkin注册全局 Skin。
LogUnregisterSkin注销 Skin。
LogClearSkins清空全部 Skin。
OpenConsole需要控制台输出时可先打开控制台。